package com.wlz.oauth2.config;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.annotation.Configuration;
import org.springframework.security.crypto.password.PasswordEncoder;
import org.springframework.security.oauth2.config.annotation.configurers.ClientDetailsServiceConfigurer;
import org.springframework.security.oauth2.config.annotation.web.configuration.AuthorizationServerConfigurerAdapter;
import org.springframework.security.oauth2.config.annotation.web.configuration.EnableAuthorizationServer;

/**
 *  配置授权服务器
 *    1. 基于内存配置
 *
 *    授权码模式
 *      1. 获取授权码 (浏览器地址栏输入，或者使用工具，例如 Talend API Tester 但是第一次得登陆，所以最好使用浏览器访问)
 *          登录之后进入授权页面，确定授权后浏览器会重定向到指定路径 并带有 code （例如： https://www.baidu.com/?code=rbtHzf）
 *          http://localhost:8080/oauth/authorize?response_type=code&client_id=client&redirect_uri=https://www.baidu.com&scope=all
 *      2. 获取令牌 (postman 模拟请求)
 *          http://localhost:8080/oauth/token
 *      3. 访问资源 （方式有多种）
 *         方式1：
 *              http://localhost:8080/user/getCurrentUser?access_token=37b086c0-3c4e-4bfa-a200-32a08d290156
 *         方式2: (headers 里 加 Authorization ： bearer 37b086c0-3c4e-4bfa-a200-32a08d290156)
 *              http://localhost:8080/user/getCurrentUser
 *
 * @author wlz
 * @desc
 * @date 2021-10-05 14:39
 */
//@Configuration
//@EnableAuthorizationServer
public class AuthorizationServerCodeConfig extends AuthorizationServerConfigurerAdapter {

    @Autowired
    private PasswordEncoder passwordEncoder;


    @Override
    public void configure(ClientDetailsServiceConfigurer clients) throws Exception {

        //授权码模式
        //http://localhost:8080/oauth/authorize?response_type=code&client_id=client&redirect_uri=https://www.baidu.com&scope=all
        clients.inMemory()
                .withClient("client") // 配置 client_id
                .secret(passwordEncoder.encode("123456")) // 配置 client_secret
                .accessTokenValiditySeconds(3600) // 配置访问token的有效期
                .refreshTokenValiditySeconds(864000) // 配置刷新token的有效期
                .redirectUris("https://www.baidu.com") // 配置redirect_uri，用于授权成功后跳转
                .scopes("all")  // 配置申请的权限范围
                .authorizedGrantTypes("authorization_code"); // 配置grant_type，表示授权类型
    }
}
